ofsp2026 15_mesh

Created time
Mar 28, 2026 08:27 AM
type
Post
status
Published
date
Mar 28, 2026
slug
ofsp2026 15_mesh
summary
tags
ofsp2026
OpenFOAM
category
post
icon
password
Place
Last edited time
Mar 28, 2026 09:14 AM
📌
Important
访问 https://aerosand.cc 以获取最近更新。

0. 前言

除了 setRootCase.H 和 createTime.H,还有一个必然会出现的头文件 createMesh.H。
本文主要讨论
了解和网格相关的类
理解 createMesh.H 头文件
练习网格相关的方法
编译运行 mesh 项目

1. 项目准备

终端输入命令,建立项目
测试初始求解器,提供脚本和说明。

2. mesh

我们先不看 createMesh.H 的源代码,先从应用的需求切入,也就是,我们需要基于具体的 case 建立的计算用的 mesh ,这个 mesh 当然也有自己的数据(包括 point, face 等等),也要有自己的方法(包括返回点列,返回面心等等)。

2.1. primitiveMesh

OpenFOAM 提供了基于几何要素的 primitiveMesh 类。
终端输入命令,查阅 primitiveMesh 类的声明
可以看到该 primitiveMesh 类并不继承其他类
我们大概挑几处代码作为切入点简单了解一下 primitiveMesh 类。
通过这个构造汉书可以看到 primitiveMesh 类从基本的几何要素,点、面、单元构造对象。
几何要素,点、面、单元由 blockMesh 生成,或者由第三方网格软件生成再转换成 OpenFOAM 格式。无论如何,点、面、单元被生成在 case/constant/polyMesh/ 文件夹下。这里的几何数据只是数据而已,不具备任何的方法。
注意此类是纯虚类(抽象类),无法直接实体化。

2.2. polyMesh

在 primitiveMesh 纯虚类(抽象类)的基础上,OpenFOAM 又提供派生的 polyMesh 类。polyMesh 类基本上还是几何拓扑的,此外提供有一些几何拓扑的方法。
终端输入命令,查阅 polyMesh 的声明
我们大概挑几处代码作为切入点简单了解一下 polyMesh 类。
使用 polyMesh 类,我们可以构造 mesh 对象,并进行一些网格操作。
对于几何要素,可以封装起来方便后续使用。
OpenFOAM 提供 IOobject 类来封装接入这些数据。
终端输入命令,查找 IOobject.H
大概挑几处代码作为切入点简单了解一下 IOobject 类。
修改主源码如下
有读者可能会注意到 IOobject 的构造是基于 runTime 的,而不是直接基于 constant/polyMesh 的。回忆上篇讨论中 Time 类的查找机制,可以知道 Time 类具有复杂的查找机制。
📌
Tip
这里涉及到源代码的实现细节,目前阶段不用深究也不建议过渡深究。
编译运行
终端输出信息如下

2.3. fvMesh

OpenFOAM 在 polyMesh 类的基础上,添加了有限体积的方法,进而派生出了 fvMesh 类。
终端输入命令,查阅 fvMesh 类的声明
大概挑几处代码作为切入点简单了解一下 fvMesh 类。
使用 fvMesh 类,我们可以构造 mesh 对象,并进行一些操作,包括网格的操作。
主源码修改为
编译运行
终端输出信息如下
读者也可以把 max 函数去掉重新编译查看结果。基于这三个子类和父类的讨论,我们可以想见 createMesh.H 主要是什么代码语句。

3. createMesh.H

终端输入命令,查阅此头文件
为了方便理解,我们查阅一下 OpenFOAM 2.0x 版本的代码,
代码内容如下
可以看到,这和我们在钱文写的代码一样。
现代版本的代码如下
两个版本的代码对比来看,我们大概可以理解该文件的主要内容是什么,以及现代版本增加了哪些机制。

4. 网格信息

我们可以综合上述讨论,在项目中使用网格信息。
主源码修改如下
为了方便结果显示,修改调试算例 debug_case/system/blockMeshDict 中设置的网格划分数量
编译运行
终端输出信息如下

5. 网格方法

我们来练习使用更多的网格方法(成员方法)
主源码修改为
编译运行
终端输出信息如下

6. 小结

通过讨论,我们简单认识了和网格相关的类,以及 createMesh.H 到底是什么。
到此为止,必备头文件 setRootCase.H,createTime.H,createMesh.H 全部已经讨论清楚。
本文完成讨论
了解和网格相关的类
理解 createMesh.H 头文件
练习网格相关的方法
编译运行 mesh 项目
 

支持我们

📌
Tip
希望这里的分享可以对坚持、热爱又勇敢的您有所帮助。
如果这里的分享对您有帮助,您的评论或赞助将对本系列以及后续其他系列的更新、勘误、迭代和完善都有很大的意义,这些行动也会为后来的新同学的学习有很大的助益。
赞助打赏时的信息和留言将用于展示和感谢。
Alipay
Alipay
 
Copyright @ 2026 Aerosand
  • OpenFOAM 开发代码 :GPL v3
 
 
Loading...